package com.xesj.util;

import java.util.Date;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * 
*   
* 项目名称：WtlServer  
* 类名称：StrValidate  
* 类描述：校验类  
* 创建人：李兆楠  
* 创建时间：2013年7月23日 下午4:48:26  
* 修改人：李兆楠  
* 修改时间：2013年7月23日 下午4:48:26  
* 修改备注：  
* @version V1.0
*
 */
public class StrValidate {
	public static boolean isNull(Object o){
		if(o==null)return true;
		else if("".equals(String.valueOf(o)))return true;
		else if("NULL".equals(String.valueOf(o)))return true;
		return false;
	}
	/**
	 * 得到长度
	 * 
	 * @param str
	 * @return
	 */
	public static int getLen(String str) {
		if (str == null || "".equals(str))
			return 0;
		return str.length();
	}
	/**
	 * 文件类型是否是图片的"gif","png","jpg"
	 * @param typeImage
	 * @return
	 */
    
	public static boolean validateIsFileTypeImage(String typeImage)
	{
		String types[] = {"GIF","PNG","JPG","JPEG","BMP"};
	    for(String type : types)
	    {
	    	if(typeImage!=null&&typeImage.toUpperCase().indexOf(type)!=-1)
	    	{
	    		return true;
	    	}
	    }
	    return false;
	}
	
	/**
	 * 验证输入字符串是否包括特殊字符和空字符，不含则通过
	 * 
	 * @param str
	 * @return 通过返回true,不通过返回false
	 */
	public static boolean validateFormat(Object obj) {
		if (obj == null || "".equals(obj))
			return false;
		String str = obj.toString();
		if (getLen(str) == 0)
			return false;
		boolean b1, b2;
		Pattern p = Pattern.compile("\\p{Punct}");// 验证是否包含特殊字符
		Matcher m = p.matcher(str);
		b1 = m.find();
		Pattern p1 = Pattern.compile("\\s");// 验证是否含空格
		Matcher m1 = p1.matcher(str);
		b2 = m1.find();
		if (!b1 && !b2)
			return true;

		return false;
	}
	/**
	 * 验证输入字符串是否包括特殊字符和空字符，不含则通过
	 * 
	 * @param str
	 * @return 通过返回true,不通过返回false
	 */
	public static boolean validateFormat(Object obj,int minLen,int maxLen) {
		if (obj == null || "".equals(obj))return false;			
		String str = obj.toString();
		if( getLen(str)<minLen||getLen(str)>maxLen )return false;
		
		Pattern p = Pattern.compile("\\p{Punct}");// 验证是否包含特殊字符
		Matcher m = p.matcher(str);
		boolean b1 = m.find();		
		if (!b1)
			return true;
	
		return false;
	}
	
	
	
	
	/*
	 * 2-您父亲的生日是？	
		12-您高中班主任的名字是？
		13-您的学号（或工号）是？
		16-您最熟悉的童年好友名字是？
		17-您最熟悉的学校宿舍室友名字是？
		18-对您影响最大的人名字是？*/
	public static boolean validateQuestionType(String questionType)
	{
		if(questionType==null||questionType.trim().length()==0)
		{
		    return false;	
		}
		String[] types = {"2","12","13","16","17","18"};
		
		for(int i = 0;i<types.length;i++)
		{
			String str = types[i];
			if(str.equals(questionType))
			{
				return true;
			}
		} 
		return false;
		
	}
	/**
	 * 验证输入字符串是否包括特殊字符和空字符，不含则通过
	 * 
	 * @param str
	 * @return 通过返回true,不通过返回false
	 */
	public static boolean validateFormat(Object obj,int strlen) {
		if (obj == null || "".equals(obj))return false;			
		String str = obj.toString();
		if( getLen(str)!=strlen)return false;
		Pattern p = Pattern.compile("\\p{Punct}");// 验证是否包含特殊字符
		Matcher m = p.matcher(str);
		boolean b1 = m.find();		
		if (!b1)
			return true;

		return false;
	}

	/**
	 * 验证文本 是否包含特殊字符 不含则通过
	 * 
	 * @param str
	 * @return 通过返回true 不通过返回false
	 */
	public static boolean validateContext(String str) {
		if (getLen(str) == 0)
			return false;
		boolean b1;
		Pattern p = Pattern.compile("\\p{Punct}");// 验证是否包含特殊字符
		Matcher m = p.matcher(str);
		b1 = m.find();

		if (!b1)
			return true;

		return false;
	}

	/**
	 * 验证输入字符串数组是否包括特殊字符和空字符，不含则通过
	 * 
	 * @param str
	 * @return
	 */
	public static boolean validateFormat(Object[] str) {
		if (str == null || "".equals(str))
			return false;
		for (int i = 0; i < str.length; i++) {
			if (!validateFormat(str[i])) {
				return false;
			}
		}

		return true;
	}
	

	/**
	 * 验证邮箱
	 * 
	 * @param email
	 * @return
	 */
	public static boolean validateEmail(String email) {
		if (getLen(email) == 0)
			return false;
		String regex = "^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$";
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(email);
		return m.matches();
	}
	
	
	/**
	 * 验证验证传真
	 * 
	 * @param email
	 * @return
	 */
	public static boolean validateFax(String fax) {
		if (getLen(fax) == 0)
			return false;
		String regex = "^[+]{0,1}(\\d){1,3}[ ]?([-]?((\\d)|[ ]){1,12})+$";
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(fax);
		return m.matches();
	}
	
	
	/**
	 * 验证会员账号
	 * @param memberAccount
	 * @param minLen
	 * @param maxLen
	 * @return
	 */
	public static boolean validateAccount(String memberAccount,int length) {
		if (memberAccount == null || "".equals(memberAccount))return false;			
		String str = memberAccount.toString();
		if( getLen(str)!=length)return false;
	    String regex = "^\\w+$";
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(memberAccount);
		return m.matches();
	}
	
	
	
	/**
	 * 
	 * 验证手机号码
	 *@param email
	 *@return
	 */
	public static boolean validateMobile(String mobile) {
		if(mobile==null || "".equals(mobile))
			return false;
		String regex = "^(13|15|18|14)[0-9]{9}$";
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(mobile);
		return m.matches();
	}
	/**
	 * 验证所有电话(座机或手机)
	 * @param tel
	 * @return
	 */
	public static boolean valTelephone(String tel){
		if(tel==null || "".equals(tel))return false;
		String regex1 = "^(0[0-9]{2,3}\\-)?([2-9][0-9]{6,7})+(\\-[0-9]{1,4})?$";//区号+座机号码+分机号码
		String regex2 = "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";//所有手机号码
		Pattern p1 = Pattern.compile(regex1);
		Pattern p2 = Pattern.compile(regex2);
		Matcher m1 = p1.matcher(tel);
		Matcher m2 = p2.matcher(tel);
		return m1.matches()||m2.matches();
	}

	public static boolean valPosCode(Object ob){		
		if (ob == null || "".equals(ob))
			return false;
		String o = ob.toString();
		if (getLen(o) == 0)
			return false;
		if (o.equals("0"))
			return false;
		String reges = "^\\d{6}$";
		Pattern p = Pattern.compile(reges);
		Matcher m = p.matcher(o);
		return m.matches();
	}
	/**
	 * 
	 * 判断字符串是否由数字组成
	 *@param str
	 *@return
	 */
	public static boolean isNumber(String str) {
		if(str==null || "".equals(str))return false;
		java.util.regex.Pattern pattern = java.util.regex.Pattern
				.compile("[0-9]*");
		java.util.regex.Matcher match = pattern.matcher(str);
		if (match.matches() == false) {
			return false;
		} else {
			return true;
		}
	}
	/**
	 * 
	 * 判断字符串是否由数字组成
	 *@param str
	 *@return
	 */
	public static boolean checkNumIsEqual(Object obj1 ,Object[] obj2) {

		if (!validateNum(obj1)){
			return false;
		}		
		for(int j = 0; j < obj2.length;){
			if(obj1 == obj2[j]){
		
				return true;
			}else{
				return false;
			}
		}
		return true;
	}
	
	/**
	 * 
	 * 判断字符串是否由数字组成,年龄在18-120周岁
	 *@param str
	 *@return
	 */
	public static boolean validateNumScope(String str, int minValue, int maxValue) {
		if (isNumber(str) == false) {
			return false;
		} else {
			if(Integer.parseInt(str) < minValue || Integer.parseInt(str) > maxValue){
				return false;
			}
			return true;
		}
	}
		
	/**
	 * 验证证件号码是否合法
	 * @param _paperworktype
	 * @param _paperwork
	 * @return
	 */
	public static boolean validatePaperwork(String _paperworktype,String _paperwork) {
		if (getLen(_paperworktype) == 0)
			return false;
		
		if (getLen(_paperwork) == 0)
			return false;
		
		String regex = null;
		if ("EC001".equals(_paperworktype)) {
			regex="^[1-9]([0-9]{14}|[0-9]{17})$";
		} else if ("EC002".equals(_paperworktype)) {
			regex="^[1-9]([0-9]{14}|[0-9]{17})$";	
		} else if ("EC003".equals(_paperworktype)) {
			regex="^[a-zA-Z0-9]{7,21}$";	
		} else if ("EC004".equals(_paperworktype)) {
			regex="^[a-zA-Z0-9]{5,21}$";
		} else  return false;
		
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(_paperwork);
		return m.matches();
	}
	

	/**
	 * 验证数字
	 * 
	 * @param o
	 * @return
	 */
	public static boolean validateNum(Object ob) {
		if (ob == null)
			return false;
		String o = ob.toString();
		if (getLen(o) == 0)
			return false;
		if (o.equals("0"))
			return false;
		String reges = "^\\d{1,18}(?:\\.\\d*)?$";
		Pattern p = Pattern.compile(reges);
		Matcher m = p.matcher(o);
		return m.matches();
	}
	
	/**
	 * 验证数字及数字长度
	 * @param ob
	 * @param length
	 * @return
	 */
	public static boolean validateNum(Object ob,int length) {
		if (ob == null)
			return false;
		String o = ob.toString();
		if (getLen(o) == 0 || getLen(o) != length)
			return false;
		if (o.equals("0"))
			return false;
		String reges = "^\\d{1,18}(?:\\.\\d{1,4})?$";
		Pattern p = Pattern.compile(reges);
		Matcher m = p.matcher(o);
		return m.matches();
	}
	
	/**
	 * 数字长度不足12位，则在前面补0
	 * @param _money
	 * @return 12位的金额
	 */
	public static String getMoney(String _money) {
		int strMoneyLen = _money.length();
		StringBuffer sbf = new StringBuffer();
		for(int i=0;i<12-strMoneyLen;i++){
			sbf.append("0");
		}
		sbf.append(_money);

		
		return sbf.toString();
	}
	/**
	 * 验证数字数组
	 * 
	 * @param o
	 * @return
	 */
	public static boolean validateNum(Object[] o) {
		for (int i = 0; i < o.length; i++) {
			if (!validateNum(o[i])) {
				return false;
			}
		}
		return true;
	}

	/**
	 * 
	 * 验证日期
	 *@param o
	 *@return
	 */
	public static boolean validateDate(Object o)
	{
		if(o==null||"".equals(o))return false;
		String str = o.toString().split(" ")[0];
		String regex = "((^((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/\\._])(10|12|0?[13578])([-\\/\\._])(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/\\._])(11|0?[469])([-\\/\\._])(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/\\._])(0?2)([-\\/\\._])(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([3579][26]00)([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([1][89][0][48])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([2-9][0-9][0][48])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([1][89][2468][048])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([2-9][0-9][2468][048])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([1][89][13579][26])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([2-9][0-9][13579][26])([-\\/\\._])(0?2)([-\\/\\._])(29)$))";

		//String regex = "((^\\d{4}(\\-|\\/|\\.)\\d{1,2}\\1\\d{1,2}$))";
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(str);
		return m.matches();
	}

	/**
	 * 
	 * 验证网址
	 *@param str
	 *@return
	 */
	public static boolean validateWWW(String str) {
		if (getLen(str) == 0)
			return false;
		String reges = "^www.[a-z0-9]+\\.com$";
		Pattern p = Pattern.compile(reges);
		Matcher m = p.matcher(str);
		return m.matches();
	}
	
	/**
	 * 非空判断
	 * @param o
	 * @return
	 */
	public static boolean validateNotNull(Object o) {
		if(o==null)return false;
		String str = o.toString();
		String reges = "(\\S+)";
		Pattern p = Pattern.compile(reges);
		Matcher m = p.matcher(str);
		return m.matches();
	}
	
	/**
	 * 验证输入字符串是否为空，并限制字符串长度，符合则通过
	 * @param str
	 * @return 通过返回true,不通过返回false
	 */
	public static boolean validatePwd(Object obj,int minLen,int maxLen) {
		if (obj == null || "".equals(obj))return false;			
		String str = obj.toString();
		if( getLen(str)<minLen||getLen(str)>maxLen ){
			return false;
		}else{
			return true;
		}
	}
	
	
	/**
	 * 验证输入字符串是否为空、是否符合要求大小
	 * @param str
	 * @return 通过返回true,不通过返回false
	 */
	public static boolean validateStrMax(Object obj, int len) {
		if (obj == null || "".equals(obj))
			return false;
		String str = obj.toString();
		if (getLen(str) != len)
			return false;
		
		return true;
		
	}
	
	/**
	 * 字符+数字
	 * @param o
	 * @return
	 */
	public static boolean valChar(Object o) {
		if(getLen(o.toString())==0)return false;
		String str = o.toString();
		Pattern p1 = Pattern.compile("\\w+");// 验证是否含空格
		Matcher m1 = p1.matcher(str);
		return m1.matches();
	}
	
	/**
	 * 验证gender
	 * 
	 * @param o
	 * @return
	 */
	public static boolean validateFinalNum(Object o) {
		if (!isNumber(o.toString()))
			return false;
		if (!"1".equals(o.toString()) && !"2".equals(o.toString())) {
			return false;
		}
		return true;
	}

	/**
	 * 验证queryType
	 * 
	 * @param o
	 * @return
	 */
	public static boolean validateQueryType(Object o) {
		if (!isNumber(o.toString()))
			return false;
		if (!"1".equals(o.toString()) && !"2".equals(o.toString())
				&& !"3".equals(o.toString()) && !"4".equals(o.toString())
				&& !"5".equals(o.toString())) {
			return false;
		}
		return true;
	}

	/**
	 * 验证输入字符串数组是否包含NULL和空字符，不含则通过
	 * 
	 * @param str
	 * @return
	 */
	public static boolean validateObjGroup(Object[] args) {
		if (args == null)
			return false;
		for (int i = 0; i < args.length; i++) {
			if (isNull(args[i])) {
				return false;
			}
		}
		return true;
	}
	
	/**
	 * 时间字符串转换为SQL下面的Timestamp对象
	 * @param str
	 * @return
	 */
	public static Timestamp formatDate(String str) {
		if (str != null && !"".equals(str)) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			String time = null;
			try {
				time = sdf.format(sdf.parse(str));
			} catch (ParseException e) {
				return null;
			}
			Timestamp ts = Timestamp.valueOf(time);
			return ts;
		}
		return null;
	}
	
	/**
	 * 根据查询的类型返回时间
	 * @param time
	 * @param queryType 1表示Year，2表示month,3表示week,4表示day,5表示hour
	 * @return
	 */
	public static Object[] getTime(Timestamp time, String queryType){

		if (!isNumber(queryType)){
			return null;
		}
		int intQueryType =  new Integer(queryType);
		Object [] arrayTime = null;
	
		time = getCurrLastTime(time, "");
		switch (intQueryType) {
		case 1:// 表示年
			arrayTime = new Object[12];
			arrayTime[0] = time.toString();
			for (int i = 1; i < arrayTime.length; i++) {
				time.setMonth(time.getMonth() - 1);
				arrayTime[i] = time.toString();
			}
			break;
		case 2:// 表示月
			int daysNum = getCurrMonthDaysNum(time);
			arrayTime = new Object[daysNum];
			arrayTime[0] = time.toString();
			for (int i = 1; i < arrayTime.length; i++) {
				time.setDate(time.getDate() - 1);
				arrayTime[i] = time.toString();
			}
			break;
		case 3:// 表示周
			arrayTime = new Object[7];
			arrayTime[0] = time.toString();
			for (int i = 1; i < arrayTime.length; i++) {
				time.setDate(time.getDate() - 1);
				arrayTime[i] = time.toString();
			}
			break;
		case 4:// 表示天
			arrayTime = new Object[24];
			//arrayTime[0] = getCurrFirstTime(time);
			int len = arrayTime.length - 1;
			for (int i = 0; i <= len; i++) {
				if (i == 0){
					arrayTime[len] = time.toString();
					continue;
				}
				time.setHours(time.getHours() - 1);
				arrayTime[len - i] = time.toString();
			}
			break;
		default:
			break;
		}
		return arrayTime;
	}
	
	/**
	 * 根据查询的类型返回一天的第一个时间
	 * @param time
	 * @param queryType 1表示Year，2表示month,3表示week,4表示day,5表示hour
	 * @return
	 */
	public static String getFirstTime(Timestamp time, String queryType){

		if (!isNumber(queryType)){
			return null;
		}
		int intQueryType =  new Integer(queryType);
		String date = null;
				
		switch (intQueryType) {
		case 1:// 表示年
			time = getCurrTime(time);
			time.setMonth(time.getMonth() - 1);
			date = time.toString();
			break;
		case 2:// 表示月
			time = getCurrTime(time);
			date = time.toString();
			break;
		case 3:// 表示周
			//time.setDate(time.getDate() - 1);
			time = getCurrTime(time);
			date = time.toString();
			break;
		case 4:// 表示天
			time.setMinutes(time.getMinutes() - 59);
			time.setSeconds(time.getSeconds() - 59);
			date = time.toString();
			break;
		default:
			break;
		}
		return date;
	}
	
	/**
	 * 获取当前时间的月份，天，和星期几
	 * @param time
	 * @param queryType
	 * @return
	 */
	public static String getNumTag(Timestamp time, String queryType){
		if (!isNumber(queryType)){
			return "";
		}
		int intQueryType =  new Integer(queryType);
		String numTag = "";
		switch (intQueryType) {
		case 1:// 表示年
			numTag = String.valueOf(time.getMonth() + 1);
			break;
		case 2:// 表示月
			numTag = String.valueOf(time.getDate());
			break;
		case 3:// 表示周
			//time.setDate(time.getDate() - 1);
			numTag = getWeek(time.getDay() + 1);
			break;
		case 4:// 表示天
			numTag = String.valueOf(time.getHours() + 1);
			break;
		default:
			break;
		}
		return numTag;
	}
	
	/**
	 * 验证数字或2位的小数，并不能大于maxValue
	 * @param o
	 * @return
	 */
	public static Boolean valNumOrDecimal(Object o, int maxValue) {
		if (o == null || "".equals(o))return false;		
		if (getLen(o.toString()) == 0)
			return false;
//		String reges = "^[-,+]{0,1}[0-9]{0,}[.]{0,1}[0-9]{0,}$";
		String reges = "^\\-?([1-9]\\d*|0)(\\.\\d{0,2})?$";
		Pattern p = Pattern.compile(reges);
		Matcher m = p.matcher(o.toString());
		if (m.matches()){
			float fltNum = Float.valueOf(o.toString());
			if (fltNum > maxValue || fltNum < 0){
				return false;
			}
		}
		return m.matches();
	}
	
	/**
	 * 对字符串进行分割，获取其中的数字
	 * @return
	 */
	public static int[] getNum(String str , int minValue, int maxValue ){
		if (isNull(str))return null;
		Object[] objs = str.split(",");
		int[] num = new int[objs.length];
		for (int i = 0; i < objs.length; i++) {
			if (!validateNumScope(objs[i].toString(), minValue, maxValue)){
				return null;
			}
			num[i] = new Integer(objs[i].toString());			
		}
		return num;
	}
	
	/**
	 * 把时间格式化成timeLength位数字
	 * 
	 * @param date
	 * @return
	 */
	public static String getIntDate(String date, int timeLength) {
		Timestamp tt = formatDate(date);
		if (tt == null) {
			return null;
		}
		StringBuilder sb = new StringBuilder();
		if (timeLength == 8)
		{
			sb.append(tt.getYear() + 1900).append(tt.getMonth() + 1)
			.append(tt.getDate());			
		}else if(timeLength == 10)
		{
			sb.append(tt.getYear() + 1900).append(tt.getMonth() + 1)
			.append(tt.getDate()).append(tt.getHours());
		}
		return sb.toString();
	}
	/**
	 * 获取挑战房间号码的唯一标识
	 * @param time
	 * @param room_num
	 * @return
	 */
	public static String getRoom_tag(Timestamp time, String room_num)
	{
		StringBuilder sb = new StringBuilder();
		sb.append(time.getYear() + 1900).append(time.getMonth() + 1)
		.append(time.getDate()).append("_").append(room_num);
		
		return sb.toString();
	}
	
	// 这是一个将西欧字符转换为gb2312字符的转换方法
	public static String getGBString(String src) {
		try {
			return new String(src.getBytes("ISO-8859-1"), "UTF-8");
		} catch (java.io.UnsupportedEncodingException e) {
			return null;
		}
	}
	
	/**
	 * 返回传递进来时间的最开始时间
	 * @param time
	 * @return
	 */
	public static String getCurrFirstTime(Timestamp time){
		StringBuilder sb = new StringBuilder();
		sb.append(time.getYear() + 1900).append("-").append(time.getMonth() + 1)
		.append("-").append(time.getDate()).append(" 00:00:00.0");		
		return sb.toString();
	}
	
	/**
	 * 返回传递进来时间的第一时间
	 * @param time
	 * @return
	 */
	public static Timestamp getCurrTime(Timestamp time){
		StringBuilder sb = new StringBuilder();
		sb.append(time.getYear() + 1900).append("-").append(time.getMonth() + 1)
		.append("-").append(time.getDate()).append(" 00:00:00");
		SimpleDateFormat sdf  = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = null;
		try {
			date = sdf.parse(sb.toString());
		} catch (ParseException e) {
			return null;
		}
		return Timestamp.valueOf(sdf.format(date));
	}
	
	/**
	 * 返回传递进来时间的第一个月的第一时间
	 * @param time
	 * @return
	 */
	public static Timestamp getCurrFirstMonth(Timestamp time){
		StringBuilder sb = new StringBuilder();
		sb.append(time.getYear() + 1900).append("-").append(time.getMonth() + 1)
		.append("-").append("01").append(" 00:00:00");
		SimpleDateFormat sdf  = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = null;
		try {
			date = sdf.parse(sb.toString());
		} catch (ParseException e) {
			return null;
		}
		return Timestamp.valueOf(sdf.format(date));
	}
	
	/**
	 * 返回传递进来时间的最后一个月的最后一时间
	 * @param time
	 * @return
	 */
	public static Timestamp getCurrLastMonth(Timestamp time, int daysNum){
		StringBuilder sb = new StringBuilder();
		sb.append(time.getYear() + 1900).append("-").append(time.getMonth() + 1)
		.append("-").append(daysNum).append(" 23:59:59");
		SimpleDateFormat sdf  = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = null;
		try {
			date = sdf.parse(sb.toString());
		} catch (ParseException e) {
			return null;
		}
		return Timestamp.valueOf(sdf.format(date));
	}
	
	/**
	 * 返回传递进来时间的最后时间
	 * @param time
	 * @return
	 */
	public static Timestamp getCurrLastTime(Timestamp time, String type){
		StringBuilder sb = new StringBuilder();
		sb.append(time.getYear() + 1900).append("-").append(time.getMonth() + 1)
		.append("-").append(time.getDate());
		if ("4".equals(type)){// 表示天
			sb.append(" 00:59:59.0");
		}else{			
			sb.append(" 23:59:59.0");
		}
		SimpleDateFormat sdf  = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = null;
		try {
			date = sdf.parse(sb.toString());
		} catch (ParseException e) {
			return null;
		}
		return Timestamp.valueOf(sdf.format(date));
	}
	
	/**
	 * 返回当前时间的月份天数
	 * @param time
	 * @return
	 */
	public static int getCurrMonthDaysNum(Timestamp time){
		int currMonth = time.getMonth() + 1;
		int arrDateLength = 0; // 标识当前月有多少天
		if (currMonth == 2){ // 当前为2月
			int year = time.getYear() + 1900;
			if (year%400 == 0 || year%4 == 0){ // 闰年，2月29天
				arrDateLength = 29;
			}else { // 平年，2月28天
				arrDateLength = 28;
			}			
		}else{ // 非2月
			if (currMonth < 8){ // 8月之前双数月为30天，单数月为31天
				if (currMonth % 2 == 0){ // 双数月30天
					arrDateLength = 30;
				}else {
					arrDateLength = 31;
				}
			}else{
				if (currMonth % 2 == 0){ // 双数月31天
					arrDateLength = 31;
				}else {
					arrDateLength = 30;
				}
			}
		}		
		return arrDateLength;
	}
	
	// 转换成星期几
    private static String getWeek(int day) {
        switch (day) {
        case 1:
            return "Sunday";
        case 2:
            return "Monday";
        case 3:
            return "Tuesday";
        case 4:
            return "Wednesday";
        case 5:
            return "Thursday";
        case 6:
            return "Friday";
        case 7:
            return "Saturday";
        }
        return "";
    }
	
	public static void main(String[] args) {

//		移动：134、135、136、137、138、139、150、151、157（TD）、158、159、187、188
//
//		联通：130、131、132、152、155、156、185、186
//
//		电信：133、153、180、189、（1349卫通）
//		Object[] obj = getTime(formatDate("2012-03-09 15:23:23"),"2");
//		for (int i = 0; i < obj.length; i++) {
//			System.out.println(obj[i].toString());
//		}
//		System.out.println(valNumOrDecimal("--12.3",50));
//		int[] num = getNum("1,2,3,4,5,6,7,8,9,10");
//		for (int i = 0; i < num.length; i++) {
//			System.out.println(num[i]);
//		}
		
//		Map<Integer, Integer> map = new HashMap<Integer, Integer>();
//		map.put(1, 2);
//		map.put(2, 3);
//		for(Integer dataKey : map.keySet())   
//		{   
//		    System.out.println(dataKey + "-" + map.get(dataKey) );              
//		} 
		
//		Timestamp tt = formatDate("2012-12-12" + " 00:00:00");
//		System.out.println(tt.toString());
//		StringBuilder sb = new StringBuilder();
//		System.out.println(tt.getYear() + 1900);
//		System.out.println(tt.getMonth() + 1);
//		System.out.println(tt.getDate());
//		sb.append(tt.getYear() + 1900).append(tt.getMonth() + 1).append(tt.getDate());
//		Timestamp t = new Timestamp(System.currentTimeMillis());
//		System.out.println(getRoom_tag(t, "10"));
//		Set<Integer> s = new HashSet<Integer>();
//		s.add(1);
//		s.add(2);
//		s.add(4);
//		s.add(4);
//		Iterator<Integer> it = s.iterator();
//		while (it.hasNext()) {
//			Integer i = it.next();
//			System.out.println(i);
//			
//		}
//
//		Timestamp time = Timestamp.valueOf("2012-05-08 17:56:23");
//		Object[] obj = getTime(time, "4");
//		for (int i=0;i<obj.length;i++) {
//			System.out.println((i + 1) + "------->" + obj[i]);
//		}
//		
//		
//		System.out.println("最后的时间为：" + getDate(time, "4"));
//		
//		System.out.println(getNumTag(time, "4"));
		
//		Timestamp tt = Timestamp.valueOf("2012-04-28 23:59:10");
//		System.out.println(getWeek(tt.getDay() + 1));
//		
//		Timestamp tt = Timestamp.valueOf("2012-2-12 23:59:10");
//		System.out.println(getCurrMonthDaysNum(tt));
		
		/*String password=StrValidate.getMD5String("888888");
		System.out.print(password);*/
		
	}
	
	public static String getDate(Timestamp time, String queryType){
		if (!isNumber(queryType)){
			return null;
		}
		int intQueryType =  new Integer(queryType);
		String date = null;
		SimpleDateFormat sdf  = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				
		switch (intQueryType) {
		case 1:// 表示年
			time = getCurrTime(time);
			time.setMonth(time.getMonth() - 11);
			date = time.toString();
			break;
		case 2:// 表示月
			int month = getCurrMonthDaysNum(time);
			time = getCurrTime(time);
			time.setDate((time.getDate() + 1 - month));
			date = time.toString();
			break;
		case 3:// 表示周
			//time.setDate(time.getDate() - 1);
			time = getCurrTime(time);
			long currDate = (time.getTime() - 6*24*60*60*1000);
			date = sdf.format(new Date(currDate));
			break;
		case 4:// 表示天
			time = getCurrLastTime(time, "");
			time.setHours(time.getHours() - 23);
			time.setMinutes(time.getMinutes() - 59);
			time.setSeconds(time.getSeconds() - 59);
			date = time.toString();
			break;
		default:
			break;
		}
		return date;
	}
	
	/** 
	 * @Title: getMD5String 
	 * @Description Md5加密字符串str
	 * @param str
	 * @return 
	 * @author Du.Wince 
	 * @date 2015年8月13日 下午7:11:01 
	 */
	public static String getMD5String( String str )
	{
		return Md5.MD5(str);
	}
	
	
	/** 
	 * @Title: getDouble 
	 * @Description 将Double字符串转换成Double类型
	 * @param dou Double字符串
	 * @return 
	 * @author Du.Wince 
	 * @date 2015年8月18日 上午12:49:07 
	 */
	public static double getDouble( String dou )
	{
		if ( !isNull( dou ) )
		{
			try
			{
				return Double.parseDouble( dou );
			}
			catch ( Exception e )
			{
				return 0d;
			}
		}
		else
		{
			return 0d;
		}
	}
	/** 
	 * @Title: getInt 
	 * @Description 将Int字符串转换为Int类型数据
	 * @param str Int 字符串
	 * @return 
	 * @author Du.Wince 
	 * @date 2015年8月21日 下午1:49:46 
	 */
	public static Integer getInt( String str ) 
	{
		if ( !isNull( str ) )
		{
			try
			{
				return new BigDecimal( str ).intValue();
			}
			catch ( Exception e )
			{
				return 0;
			}
		}
		else
		{
			return 0;
		}
	}
	
	/** 
	 * @Title: isNull 
	 * @Description 判断字符串数组中是否有为空的元素
	 * @param str
	 * @return 
	 * @author Du.Wince 
	 * @date 2015年8月21日 下午4:25:45 
	 */
	public static boolean isNull( String [] str )
	{
		if ( str == null || str.length == 0 )
		{
			return true;
		}
		else
		{
			int strLength = str.length;
			for ( int i = 0; i < strLength; i ++ )
			{
				if ( isNull( str[i] ) )
				{
					return true;
				}
			}
		}
		
		return false;
	}
	/** 
	 * @Title: getLong 
	 * @Description: 将Long值字符串转换成long数据类型
	 * @param longStr
	 * @return 
	 * @author Du.Wince 
	 * @date 2016年4月13日 下午4:38:30 
	 */
	public static long getLong( String longStr )
	{
		try
		{
			return Long.parseLong( longStr );
		}
		catch ( Exception e )
		{
			e.printStackTrace();
			return 0l;
		}
	}
	/** 
	 * 忽略大小写比较两个字符串
	 * @param str1 
	 * @param str2 
	 * @return 
	 * @author wjl
	 * @date 2017年6月30日16:02:48
	 */  
	public static boolean ignoreCaseEquals(String str1,String str2){  
	      return str1 == null ? str2 == null :str1.equalsIgnoreCase(str2);  
	}
	
	/** 
	* @Title: getNumericalRounding 
	* @Description: 对数字d保留n位小数，并四舍五入
	* @author Du Wince
	* @param d 要四舍五入的数字，double类型
	* @param n 要保留的小数位数
	* @return
	* @创建时间 2017年7月17日下午3:44:15
	*/
	public static double getNumericalRounding( double d, int n )
	{
		String newNumber = String.format( "%." + n + "f", d );
		return getDouble( newNumber );
	}
}
